在建立好帳號之後,我們可以開始來看看 Line bot SDK,可以從 Line developers ocumentation 中找到 python 的 github,從這邊可以找到 Line bot 的最基礎架構,我們之後想變化,增加的功能都是從這裡開始。
# app.py
from flask import Flask, request, abort
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,
)
app = Flask(__name__)
line_bot_api = LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN')
handler = WebhookHandler('YOUR_CHANNEL_SECRET')
@app.route("/callback", methods=['POST'])
def callback():
# get X-Line-Signature header value
signature = request.headers['X-Line-Signature']
# get request body as text
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
# handle webhook body
try:
handler.handle(body, signature)
except InvalidSignatureError:
print("Invalid signature. Please check your channel access token/channel secret.")
abort(400)
return 'OK'
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=event.message.text))
if __name__ == "__main__":
app.run()
首先,我們可以將整段程式碼分為三個區塊理解,分別是引入模組、告知 Line bot 的基本資料以及接收 Line 的資訊。
第一個區塊的部分,主要引入了為了架設網站用的 Flask 以及整個 Line bot 中最重要的 Line bot API,這邊架設網站不一定要使用 Flask,可以根據自己的習慣或是需求去改用其他的網頁框架。這兩個套件都要記得在 cmd 中進行 install。
pip install
line-bot-sdk
flask
而 Line bot API 的部分,因為最常用到的是訊息事件以及文字的接收與回覆,因此在一開始的架構之中,已經先把MessageEvent
、TextMessage
、TextSendMessage
給先引入完畢,若是後續有要再用到像是圖片、音檔等其他 API 的時候,就會需要再此處進行引入。
from flask import Flask, request, abort
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,
)
app = Flask(__name__)
第二個區塊是為了要讓程式碼知道他該去找到那一個帳號接收與傳遞資訊,這裡需要填入的資料可以在 Line decelopers中進入建立好的 channel,從 Basic settings 的下方找到 channel secret,Messaging API 的下方中點選 issue 取得 channel access token,token 在點選 issue 後會讓你設置重置的時間,如果不希望他重置的話,可以將時間設定為 0 hours。
line_bot_api = LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN')
handler = WebhookHandler('YOUR_CHANNEL_SECRET')
圖一、channel secret
圖二、channel access token
圖三、設置 token 重置時間
第三個區塊是用來接收當 Line bot 被觸發各事件時,所得到的資訊,後續我們要對接收到的資訊做判斷、歸類、處理的時候,都是會在這區塊中撰寫。
@app.route("/callback", methods=['POST'])
def callback():
# get X-Line-Signature header value
signature = request.headers['X-Line-Signature']
# get request body as text
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
# handle webhook body
try:
handler.handle(body, signature)
except InvalidSignatureError:
print("Invalid signature. Please check your channel access token/channel secret.")
abort(400)
return 'OK'
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=event.message.text))
if __name__ == "__main__":
app.run()
請教一下,以下這段程式的意思是甚麼
@app.route("/callback", methods=['POST'])